﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;
using Entidades.Sistema.Venta;
using Mapping.Sistema.Venta;

namespace Modelo.Sistema.Venta
{
    public class CatalogoTipoCliente
    {
        
        private List<TipoCliente> Col_tipocliente;
        Int32 maxIdTipoCliente;
        public CatalogoTipoCliente()
        {
            Col_tipocliente = Mapping.Sistema.Venta.MappingTipoCliente.ConsultarTipoClientees();
        }

        public ReadOnlyCollection<TipoCliente> ListarTipoCliente()
        {
            return Col_tipocliente.AsReadOnly();
        }

        public bool AgregarTipoCliente(TipoCliente oTipoCliente)
        {
            oTipoCliente.IdTipoCliente = GetMayor();
            oTipoCliente.IdTipoCliente = maxIdTipoCliente + 1;
            Col_tipocliente.Add(oTipoCliente);
            return Mapping.Sistema.Venta.MappingTipoCliente.AgregarTipoCliente(oTipoCliente);
        }

        public bool EliminarTipoCliente(TipoCliente oTipoCliente)
        {
            Col_tipocliente.Remove(oTipoCliente);
            return Mapping.Sistema.Venta.MappingTipoCliente.EliminarTipoCliente(oTipoCliente);
        }
        public void ModificarTipoCliente(TipoCliente oTipoCliente)
        {

            Mapping.Sistema.Venta.MappingTipoCliente.ModificarTipoCliente(oTipoCliente);
            Col_tipocliente.RemoveAll(x => x.IdTipoCliente == oTipoCliente.IdTipoCliente);
            Col_tipocliente.Add(oTipoCliente);
        }
        public TipoCliente BuscarTipoCliente(int idTipoClie)
        {
            return this.Col_tipocliente.Find(unid => unid.IdTipoCliente == idTipoClie);
        }
        public bool ValidarExistencia(TipoCliente oTipoCliente)
        {
            if (this.Col_tipocliente.Count(unid => unid.IdTipoCliente == oTipoCliente.IdTipoCliente) == 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }


        public Int32 GetMayor()
        {
            if (Col_tipocliente.Count == 0) return 0;

                 maxIdTipoCliente =
                (from und in Col_tipocliente
                 select und.IdTipoCliente)
                .Max();

            return maxIdTipoCliente;
        }
    }
}
